<?php
namespace Procesos\Cargador\Organizacion;
use Procesos\Exception\Exception;

class Cargador{

	function xmlFromToDBOrganisacion($fileLocation, $em) {
		
		
		$organizacionHandler = new OrganizacionHandler();
		
		
		
		$xml_parser = xml_parser_create('ISO-8859-1');
		xml_set_object($xml_parser,$organizacionHandler);
		xml_set_element_handler($xml_parser,"startElement","endElement");
		xml_set_character_data_handler($xml_parser,"characters");
		xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, FALSE);
		
		
		if (!($fp = fopen($fileLocation, "r"))) {
		   throw new Exception('no se puede abrir el archivo '.$fileLocation);
		}
		
		
		
		while ($file_content = fread($fp, 512)) {
		//	print $file_content.'<hr>';
		   if (!xml_parse($xml_parser, $file_content, feof($fp))) {   
		   	throw new Exception(sprintf("XML error: %s at line %d",
		                   xml_error_string(xml_get_error_code($xml_parser)),
		                   xml_get_current_line_number($xml_parser)));
		   }
		}
		
		xml_parser_free($xml_parser);
		
		
		
		$listaFuncionalidades = $organizacionHandler->getFuncionalidades();
					
		$listaFuncionalidadesComplejas = $organizacionHandler->getFuncionalidadesComplejas();
		
		$listaUnidadesLogicas = $organizacionHandler->getUnidadesLogicas();
		
		$listaUnidadesFisicas = $organizacionHandler->getUnidadesFisicas();
		
		
		$condicionError = $organizacionHandler->getCondicionError();
		if(!$condicionError ){
			$organizacion = $organizacionHandler->getOrganizacion();
			
			$em->persist($organizacion);
			
			foreach ($listaFuncionalidades as $funcionalidad) {
				$em->persist($funcionalidad);
			}
			
			foreach ($listaFuncionalidadesComplejas as $funcionalidad) {
				$em->persist($funcionalidad);
			}
			
			foreach ($listaUnidadesFisicas as $unidad) {
				$em->persist($unidad);
			}
			
			foreach ($listaUnidadesLogicas as $unidad) {
				$listaCapacidades = $unidad->getCapacidades();
				foreach ($listaCapacidades as $elemLista) {
					$em->persist($elemLista);
				}
				$em->persist($unidad);
			}
			
			$em->flush();
			
		}
	}
}



?>